<?php

class UsuariosController extends Zend_Controller_Action
{
    protected $_usuarios ;

    public function init()
    {
        /* Initialize action controller here */
        $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->cliente = Zend_Auth::getInstance()->getIdentity();
        $this->_usuarios = new Application_Model_DbTable_Usuarios();
    }

    public function indexAction()
    {
        $this->view->titulo = "Usuarios";
        // action body
        $this->view->usuarios = $this->_usuarios->obtenerTodo();
        //guardo esta paguina en mi historial
        require_once APPLICATION_PATH . '/helpers/UltimaPagVisitada.php';
        Application_Helper_UltimaPagVisitada::saveThis($this->_request->getRequestUri());
    }

    public function crearAction()
    {
        $this->view->titulo = "Registro";
        // action body
        $form = new Application_Form_Registro();
        
        if( $this->getRequest()->isPost() ){
            
            if( $form->isValid( $this->_getAllParams() ) ) {
          
                $usuario = $form->getValue('usuario');
                $nombre = $form->getValue('nombre');
                $clave = $form->getValue('clave1');
                $this->_usuarios->crearUsuario($usuario, $nombre, $clave);
                $this->hacerLogin($usuario, $clave);
                //$this->_redirect('/');     
            }      
            $this->view->form = $form;    
        }elseif( $this->getRequest()->isGet() ){
            $this->view->form = $form;
        }
        
    }

    protected function hacerLogin($usuario, $clave)
    {
        // setup Zend_Auth adapter for a database table
        Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
        $dbAdapter = Zend_Registry::get('dbAdapter');
        $authAdapter = new Zend_Auth_Adapter_DbTable(
            $dbAdapter,
            'usuarios',
            'usuario',
            'clave'
        );

        $authAdapter
            ->setIdentity($usuario)
            ->setCredential(sha1($clave));

        $auth = Zend_Auth::getInstance();
        $result = $auth->authenticate($authAdapter);

        if ($result->isValid()) {
            // success: store database row to auth's storage
            // system. (Not the password though!)
            $data = $authAdapter->getResultRowObject(null,'clave');
            $auth->getStorage()->write($data);
            $this->_redirect('/');
        } else {
            // failure: clear database row from session
            $this->_redirect('/error/error');
        }
    }

    public function borrarAction()
    {
        //http://danielbonhaure/usuarios/borrar/id/*
        $cliente = Zend_Auth::getInstance()->getIdentity()->usuario;
        $role = Zend_Auth::getInstance()->getIdentity()->role;
        
            if ($this->getRequest()->isPost()) {
                $borrar = $this->getRequest()->getPost('borrar');
                if ($borrar == 'Si') {
                    $id = $this->getRequest()->getPost('id');
                    $usuario = $this->_usuarios->obtenerUsuario($id)->usuario;
                    if ($cliente == $usuario || $role == "admin") {
                        $this->_usuarios->borrarUsuario($id);
                        if ($cliente == $usuario) $this->_redirect('/auth/logout'); 
                        else $this->_redirect('/'); 
                    } else {
                        $this->_redirect('/error/permiso');  
                    }
                } elseif ($borrar == "No") {
                    require_once APPLICATION_PATH . '/helpers/UltimaPagVisitada.php';
                    $this->_redirect(Application_Helper_UltimaPagVisitada::getLastVisited());
                }
            } else {
                $id = $this->_getParam('id');
                $usuario = $this->_usuarios->obtenerUsuario($id)->usuario;
                if ($cliente == $usuario || $role == "admin") {
                    $this->view->usuario = $this->_usuarios->obtenerUsuario($id);
                } else {
                    $this->_redirect('/error/permiso');  
                }
                $this->view->titulo = " Borrar a ".$this->_usuarios->obtenerUsuario($id)->nombre_real;
            }   
        
    }

    public function editarAction()
    {
        //http://danielbonhaure/usuarios/editar/id/#
        $id = $this->_getParam('id');
        $usuario = $this->_usuarios->obtenerUsuario($id);
        $this->view->usuario = $usuario;
        $this->view->titulo = $usuario->nombre_real;
        
        $form = new Application_Form_Perfil();
        $form->setAction('/usuarios/editar/id/' . $id);
        $form->setMethod('post');
        $form->inicializar($usuario);
        $imagen = $form->getElement('imagen');
        $upload = Zend_Registry::get('upload_paths');
        $imagen->setDestination($upload->paths->upload->images->usuarios . "/" . $usuario->usuario);
        
        if( $this->getRequest()->isPost() ){
          
            if ($form->isValid( $this->_getAllParams() )) {
                if ($form->imagen->receive()){ 
                    $data = array(
                        'foto' => $form->getValue('imagen'),
                        'path' => $imagen->getDestination(),
                        'nombre' => $form->getValue('nombre'),
                        'pais' => $form->getValue('pais'),
                        'depto' => $form->getValue('depto'),
                        'ciudad' => $form->getValue('ciudad'),
                        'dir' => $form->getValue('direccion'),
                        'tel' => $form->getValue('telefono'),
                        'email' => $form->getValue('email'),            
                    );
                    $this->_usuarios->actualizarUsuario($id,$data);
                    $this->_redirect('/usuarios/ver/id/' . $id);  
                }
            }

            $this->view->form = $form;
            
        }elseif( $this->getRequest()->isGet() ){
            
            $this->view->form = $form;
            
        }
    }

    public function cambiarClaveAction()
    {
         //http://danielbonhaure/usuarios/cambiar-clave/id/#
        $id = $this->_getParam('id');
        $usuario = $this->_usuarios->obtenerUsuario($id);
        $this->view->usuario = $usuario;
        $this->view->titulo = $usuario->nombre_real;
        
        $form = new Application_Form_Clave();
        
        if( $this->getRequest()->isPost() ){
          
            if ($form->isValid( $this->_getAllParams() )) {
                
                $claveVieja = $form->getValue('clave');
                if (sha1($claveVieja) == $usuario->clave) {
                    $claveNueva = $form->getValue('clave1');
                    $this->_usuarios->actualizarClaveUsuario($id, $claveNueva);
                    //hacer logout y despues login con la nueva clave
                    Zend_Auth::getInstance()->clearIdentity();
                    $this->hacerLogin($usuario->usuario, $claveNueva);
                    $this->_redirect('/');  
                }
                $clave = $form->getElement('clave');
                $clave->addError("Contraseña incorrecta");
            }

            $this->view->form = $form;
            
        }elseif( $this->getRequest()->isGet() ){
            
            $this->view->form = $form;
            
        }
    }

    public function cambiarRoleAction()
    {
         //http://danielbonhaure/usuarios/cambiar-role/id/#
        $id = $this->_getParam('id');
        $usuario = $this->_usuarios->obtenerUsuario($id);
        $this->view->usuario = $usuario;
        
        $form = new Application_Form_Role();
        $form->setAction('/usuarios/cambiar-role/id/' . $id);
        $form->setMethod('post');
        
        if( $this->getRequest()->isPost() ){
          
            if ($form->isValid( $this->_getAllParams() )) {
                $rol = $form->getValue('role');
                $this->_usuarios->actualizarRoleUsuario($id, $rol);
                $this->_redirect('/usuarios/editar/id/' . $id, array('method','get')); 
            }
            
        }elseif( $this->getRequest()->isGet() ){
            
            $this->view->form = $form;
            
        }
    }

    public function recordarClaveAction()
    {
        // action body
        $form = new Application_Form_Mail();
        
        if( $this->getRequest()->isPost() ){
            
            $this->view->final = FALSE;            
            if( $form->isValid( $this->_getAllParams() ) ) {
          
                $email = $form->getValue('email');
                if ($this->_usuarios->existe_mail($email)){
                    $usuario = $this->_usuarios->obtenerUsuarioEmail($email);
                    $clave = substr( md5(microtime()), 1, 8);;
                    $this->_usuarios->actualizarClaveUsuario($usuario->id, $clave);
                    //iniciar sesión en gmail
                    $config = array('ssl' => 'ssl', 'port' => 465, 'auth' => 'login', 'username' => 'info+ceis.com.py', 'password' => '@1cx-DVTrFtn');
                    $smtpConnection = new Zend_Mail_Transport_Smtp('ser.serverpy.com', $config);
                    //enviar email
                    $mail = new Zend_Mail();
                    $mail->setBodyHtml('Hola, ' . $usuario->nombre_real . ': <br><br>'
                        . 'Usted ha solicitado que se le recuerde su contraseña de usuario.<br>'
                        . 'Por respeto a su privacidad la contraseña que introdujo al registrarse se almacena '
                        . 'encriptada y no tenemos forma de recuperarla. Por esta razón generamos una contraseña '
                        . 'nueva. Esta es generada aleatoriamente y es enviada a usted.<br><br>'
                        . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Su nueva contraseña es: ' . $clave . '<br><br>' 
                        . 'A pesar que esta clave fue generada aleatoriamente se le recomienda '
                        . 'que ingrese al sistema y la cambie por una que usted disponga. <br><br>'
                        . 'Gracias,<br>El equipo de CEIS',array('encoding' => 'utf-8'));
                    $mail->setFrom('info@ceis.com.py', 'Sistema CEIS');
                    $mail->addTo($email, $usuario->nombre_real);
                    $mail->setSubject('Centro Educativo Integral del Sur.');
                    $mail->send($smtpConnection);
                    $this->view->final = TRUE;
                } else {
                    $element = $form->getElement('email');
                    $element->addError('La dirección introducida no está asociada a ninguna cuenta de usuario.');
                } 
            }      
            $this->view->form = $form;   
            
        }elseif( $this->getRequest()->isGet() ){
            $this->view->form = $form;
            $this->view->final = FALSE;
        }
    }

    public function verAction()
    {
        //http://danielbonhaure/usuarios/ver/id/#
        $id = $this->_getParam('id');
        $usuario = $this->_usuarios->obtenerUsuario($id);
        $this->view->usuario = $usuario;
        $this->view->titulo = $usuario->nombre_real;
    }


}

